#ifndef TIMERSERVICE_H
#define TIMERSERVICE_H

#include <QObject>
#include <QTimer>
#include "service_global.h"
#include "config/GlobalDefine.h"

/**
 * @brief 计时器服务类 - 负责计时器的核心业务逻辑
 * 
 * 职责：
 * - 管理计时器的启动、暂停、停止
 * - 处理倒计时/正计时逻辑
 * - 管理报警触发
 * - 管理计时器状态
 */
class SERVICE_EXPORT TimerService : public QObject
{
    Q_OBJECT

public:
    // 计时器状态枚举
    enum class TimerState {
        Stopped,    // 停止状态
        Running,    // 运行中
        Paused,     // 暂停中
        Finished    // 已完成
    };

    /**
     * @brief 获取单例实例
     */
    static TimerService& instance();

    /**
     * @brief 启动计时器
     * @param durationMs 计时时长（毫秒）
     * @param mode 计时模式（倒计时/正计时）
     */
    void startTimer(int durationMs, TimerMode mode);

    /**
     * @brief 暂停计时器
     */
    void pauseTimer();

    /**
     * @brief 恢复计时器
     */
    void resumeTimer();

    /**
     * @brief 停止计时器
     */
    void stopTimer();

    /**
     * @brief 重置计时器
     */
    void resetTimer();

    /**
     * @brief 设置报警配置
     */
    void setAlarms(const TimerConfig& config);

    /**
     * @brief 获取剩余时间（毫秒）
     */
    int getRemainingMs() const;

    /**
     * @brief 获取已用时间（毫秒）
     */
    int getElapsedMs() const;

    /**
     * @brief 获取总时长（毫秒）
     */
    int getTotalDurationMs() const;

    /**
     * @brief 获取当前状态
     */
    TimerState getState() const;

    /**
     * @brief 获取计时模式
     */
    TimerMode getMode() const;

    /**
     * @brief 是否正在运行
     */
    bool isRunning() const;

signals:
    /**
     * @brief 计时器滴答信号（每10ms触发）
     * @param remainingMs 剩余时间（毫秒）
     * @param elapsedMs 已用时间（毫秒）
     */
    void timerTick(int remainingMs, int elapsedMs);

    /**
     * @brief 计时器完成信号
     */
    void timerFinished();

    /**
     * @brief 报警触发信号
     * @param alarmType 报警类型
     */
    void alarmTriggered(TipType alarmType);

    /**
     * @brief 状态改变信号
     * @param newState 新状态
     */
    void stateChanged(TimerState newState);

private:
    explicit TimerService(QObject *parent = nullptr);
    ~TimerService();

    // 禁用拷贝
    TimerService(const TimerService&) = delete;
    TimerService& operator=(const TimerService&) = delete;

    /**
     * @brief 计时器滴答处理
     */
    void onTimerTick();

    /**
     * @brief 检查并触发报警
     */
    void checkAlarms(int currentMs);

    /**
     * @brief 改变状态
     */
    void changeState(TimerState newState);

private:
    QTimer* m_timer;                    // 计时器
    TimerState m_state;                 // 当前状态
    TimerMode m_mode;                   // 计时模式
    
    int m_totalDurationMs;              // 总时长（毫秒）
    int m_elapsedMs;                    // 已用时间（毫秒）
    
    // 报警配置
    TimerConfig m_alarmConfig;
    
    // 报警触发标记
    bool m_alarm1Triggered;
    bool m_alarm2Triggered;
    bool m_alarm3Triggered;
    bool m_timeoutTriggered;
};

#endif // TIMERSERVICE_H





